package park;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class J21HelloJDBC {

	//JDBC : Java DataBase Connectivity	
	
	public static void main(String[] args) {
		//DB접속 관련 데이터
		String DRV = "oracle.jdbc.driver.OracleDriver";
		String URL = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
		String USR = "scott";
		String PWD = "TIGER";
		
		//JDBC api (인터페이스)
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		String sql = "select * from emp";
		    
		try{
			//1.JDBC드라이버 로드
			//forName 메서드로 동적으로 객체 생성
			//Class.forName(DRV); 여기까지가 1.
			Class.forName(DRV);
			
			//2.데이터베이스 연결
			//getConnection 메서드에 접속정보가 있는URL과 계정정보 및 암호인
			//USR,PWD를 매개변수로 넘김
			
			conn = DriverManager.getConnection(URL,USR,PWD);
			System.out.println("오라클 서버 접속 성공");
			
			
			//3.실행할 SQL 질의문 생성
			//SQL 질의문은 Sting 변수에 작성
			//prepareStatement 메서드를 통해
			//prepareStatement 객체로 생성
			pstmt = conn.prepareStatement(sql);
			
			//4.SQL 질의문 실행
			//executeQuery 메서드로 SQL 질의문을 실행할 수 있음
			//5.실행 결과집합 받기
			//SQL 질의문이 select 라면 
			//실행 후 결과집합이 발생됨
			//이것을 받으려면 ResulteSet 객체를 이용
			rs = pstmt.executeQuery();
			
			StringBuilder sb = new StringBuilder();
			
			//6.결과집합 처리
			//next 메서드로 결과존재 여부를 확인하고
			//getString 메서드로 해당 필드값을 출력 
			
			while(rs.next()){
					  	   //getString(1))로하면 나비켓에서 맨 첫번째 컬럼값이 나옴
				sb.append(rs.getString(5)).append("/").append(rs.getString("ename"))
				.append("\n").append(rs.getString("empno")).append("\n")
				.append(rs.getString("sal")).append("/");
						
			}
			System.out.println(sb);
			
		}catch(ClassNotFoundException cnfe){	
			System.out.println("JDBC 드라이버를 확인하세요");
		}catch(Exception ex){
			ex.printStackTrace();
		}finally{
			//7.연결해제
			//JDBC 프로그래밍에 사용된 모든 객체들은 메모리에서 해제시킴
			//나중에 생성된것을 먼저 반납해야함 (역순)
			
			if(rs != null)
				try{
					rs.close(); //close 를 시킴으로써 자원 반납
				}catch (Exception e) {
					 
				}
			
			if(pstmt != null)
				try{
					pstmt.close(); //close 를 시킴으로써 자원 반납
				}catch (Exception e) {
					
				}
			
			if(conn != null)
				try{
					conn.close(); //close 를 시킴으로써 자원 반납
				}catch (Exception e) {
					
				}
			
		}
		
	}

}
